home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / tsr_xmpl / install.inc < prev    next >
Encoding:
Text File  |  1994-08-16  |  5.1 KB  |  160 lines

  1. ; this file contain the self-detection part, the install and deinstall part !
  2. ; don't stay in memory after installation !!!
  3.  
  4. DetectPrg PROC
  5. ; ne pas retomber sur notre MCB (prog) !!!
  6.                    MOV AX,ES ; debut du PSP
  7.                    DEC AX ; debut du MCB !!!
  8.                    MOV ES,AX ; ES=ES-1
  9.                    MOV DI,5 ; MCB = 16 octets -1-2-2
  10.                    MOV CX,11
  11.                    CLD
  12.                    XOR AL,AL
  13.                    REP STOSB ; mise a zero !!! du MCB du prog ... make it invisible !!!
  14.  
  15. ; check if already in memory ... scan MCB list !!!
  16.                    MOV AH,52h
  17.                    INT 21h
  18.                    MOV AX,ES
  19.                    DEC AX
  20.                    MOV ES,AX ; ES=ES-1
  21.                    MOV ES,WORD PTR ES:[BX+14] ; ptr vers 1er MCB ;
  22.  
  23. Search:            CMP WORD PTR ES:12,TsrId1*256+0 ; 0 pour NULL
  24.                    JNE NextMcb
  25.                    CMP WORD PTR ES:14,TsrId3*256+TsrId2
  26.                    JNE NextMcb
  27.                    STC
  28.                    RETN ; on est deja en memoire
  29.  
  30. NextMCB:           CMP BYTE PTR ES:0,'Z'
  31.                    JE PutPrgInMem ; c'est le dernier et on est pas dans la liste
  32.                    MOV AX,ES
  33.                    INC AX
  34.                    ADD AX,WORD PTR ES:3
  35.                    MOV ES,AX ; ES:0 MCB suivant
  36.                    JMP Search
  37.  
  38. PutPrgInMem:       CLC
  39.                    RETN
  40. DetectPrg ENDP
  41.  
  42.  
  43. RemovePrg PROC ; on entry ES = seg du MCB (see above)
  44.  
  45.                    CLI
  46.  
  47.                    MOV WORD PTR ES:12,0 ; chipote au MCB du prg resident
  48.                    MOV WORD PTR ES:14,0 ; remise a zero
  49.  
  50.                    MOV AX,ES
  51.                    INC AX
  52.                    MOV ES,AX ; ES=ES+1
  53.                    MOV AH,49h
  54.                    INT 21h ; remove from mem resident prg
  55.  
  56. ; Restaurer les vect. d'origines !!!
  57.  
  58.                    MOV BX,OFFSET OldInt8Ofs
  59.                    MOV DX,WORD PTR ES:[BX] 
  60.                    MOV DS,WORD PTR ES:[BX+2]
  61.                    MOV AX,2508h
  62.                    INT 21h
  63.  
  64.                    MOV BX,OFFSET OldInt9Ofs ; d'abord l'offs puis le seg (en +2)
  65.                    MOV DX,WORD PTR ES:[BX] 
  66.                    MOV DS,WORD PTR ES:[BX+2] ; il y avait plus simple mais ce @]`\[\[ d'assembleur ne voulait pas
  67.                    MOV AX,2509h
  68.                    INT 21h
  69.  
  70.                    MOV BX,OFFSET OldInt13Ofs
  71.                    MOV DX,WORD PTR ES:[BX] 
  72.                    MOV DS,WORD PTR ES:[BX+2]
  73.                    MOV AX,2513h
  74.                    INT 21h
  75.  
  76.                    MOV BX,OFFSET OldInt28Ofs
  77.                    MOV DX,WORD PTR ES:[BX] 
  78.                    MOV DS,WORD PTR ES:[BX+2]
  79.                    MOV AX,2528h
  80.                    INT 21h
  81.  
  82.                    PUSH CS
  83.                    POP DS
  84.  
  85.                    STI
  86.  
  87.                    PrintMac RemoveStr
  88.                    MOV AX,4C00h ; error n° 0 ... OK
  89.                    INT 21h ; Finito !
  90. RemovePrg ENDP
  91.  
  92.  
  93. InstallPrg PROC
  94.                    CLI
  95.  
  96.                    PUSH CS
  97.                    POP ES
  98.  
  99. ; liberer la memoire correspondante a notre envir
  100.                    MOV ES,WORD PTR ES:2Ch ; seg de notre envir
  101.                    MOV AH,49h
  102.                    INT 21h ; envir = Dead !!!
  103.  
  104.                    PUSH CS
  105.                    POP ES
  106.  
  107.                    MOV AX,ES
  108.                    DEC AX
  109.                    MOV ES,AX ; ES=ES-1
  110.                    MOV WORD PTR ES:12,TsrId1*256+0 ; put IdString in the MCB
  111.                    MOV WORD PTR ES:14,TsrId3*256+TsrId2
  112.  
  113.                    PUSH CS
  114.                    POP DS
  115.  
  116.                    MOV AX,3508h ; BIOS timer
  117.                    INT 21h
  118.                    MOV OldInt8Ofs,BX
  119.                    MOV OldInt8Seg,ES
  120.                    MOV AX,2508h
  121.                    MOV DX,OFFSET NewInt8
  122.                    INT 21h ; put new handler
  123.                                       
  124.                    MOV AX,3509h ; BIOS kbd
  125.                    INT 21h
  126.                    MOV OldInt9Ofs,BX
  127.                    MOV OldInt9Seg,ES
  128.                    MOV AX,2509h
  129.                    MOV DX,OFFSET NewInt9
  130.                    INT 21h ; put new handler
  131.  
  132.                    MOV AX,3513h ; BIOS I/O
  133.                    INT 21h
  134.                    MOV OldInt13Ofs,BX
  135.                    MOV OldInt13Seg,ES
  136.                    MOV AX,2513h
  137.                    MOV DX,OFFSET NewInt13
  138.                    INT 21h ; put new handler
  139.  
  140.                    MOV AX,3528h ; DOS Idle Int.
  141.                    INT 21h
  142.                    MOV OldInt28Ofs,BX
  143.                    MOV OldInt28Seg,ES
  144.                    MOV AX,2528h
  145.                    MOV DX,OFFSET NewInt28
  146.                    INT 21h ; put new handler
  147.  
  148.                    MOV AH,34h
  149.                    INT 21h ; return in ES:BX INDOS flag
  150.                    MOV IndosPtrOfs,BX
  151.                    MOV IndosPtrSeg,ES
  152.  
  153.                    STI
  154.  
  155.                    PrintMac InstallStr
  156.  
  157.                    MOV DX,(EndOfResident-Start+100h+15) SHR 4 ; = l'age du capitaine
  158.                    MOV AX,3100h ; error n° 0 ... OK
  159.                    INT 21h ; TSR !!!
  160. InstallPrg ENDP